from django.http import JsonResponse
from django.shortcuts import render
from django.views import View
from django.core.cache import cache
from apps.areas.models import Area

# Create your views here.
"""
需求:
    获取省份信息
前端:
    页面加载完后，会自动发送 axios请求，获取身份信息
后端:
    请求: 不需要请求参数
    业务逻辑:
    响应:
"""


class AreaView(View):
    """
    请求获取省份.
    """
    def get(self, request):
        # 先查询缓存数据
        provinces_list = cache.get('province')
        # 如果没有缓存，则直接访问数据库进行访问
        if provinces_list is None:
            # 获取的查询集.
            provinces = Area.objects.filter(parent__isnull=True)
            # 需要将query结果集转化成对象.
            provinces_list = []
            for province in provinces:
                provinces_list.append({
                    'id': province.id,
                    'name': province.name,
                })
            cache.set('province', provinces_list, 24*3600)
        return JsonResponse({'code': 0, 'province_list': provinces_list, 'errmsg': 'ok'}, json_dumps_params={'ensure_ascii': False})


"""
需求: 获取市，区县信息.
areas/id/
"""


class SubAreaView(View):
    def get(self, request, id):
        # 方式1:
        # sub_areas = Area.objects.filter(parent_id=id)
        # 方式2:
        # sub_areas = Area.objects.filter(parent=id)
        # 方式3:

        key = f'area:{id}'
        sub_areas_list = cache.get(key)
        if sub_areas_list is None:
            sub_areas = Area.objects.get(id=id).subs.all()
            sub_areas_list = []
            for area in sub_areas:
                sub_areas_list.append({
                    'id': area.id,
                    'name': area.name,
                })
            # 缓存市区数据
            cache.set(key, sub_areas_list)
        return JsonResponse({'code': 0, 'id': id, 'sub_data': {'subs': sub_areas_list}, 'errmsg': 'ok'}, json_dumps_params={'ensure_ascii': False})

